cssbordervalue: Avoid allocating new value if not needed
authorBenjamin Otte <otte@redhat.com>
Thu, 21 Apr 2016 20:28:40 +0000 (22:28 +0200)
committerBenjamin Otte <otte@redhat.com>
Thu, 21 Apr 2016 21:01:31 +0000 (23:01 +0200)
gtk/gtkcssbordervalue.c

index 0b68d86f7adb656a582b33cd2bd25b768cde107f..514005728957d67159e4b63f5675d2bf23894d0b 100644 (file)
@@ -48,28 +48,33 @@ gtk_css_value_border_compute (GtkCssValue             *value,
                               GtkCssStyle             *style,
                               GtkCssStyle             *parent_style)
 {
+  GtkCssValue *values[4];
   GtkCssValue *computed;
   gboolean changed = FALSE;
   guint i;
 
-  computed = _gtk_css_border_value_new (NULL, NULL, NULL, NULL);
-  computed->fill = value->fill;
-
   for (i = 0; i < 4; i++)
     {
       if (value->values[i])
         {
-          computed->values[i] = _gtk_css_value_compute (value->values[i], property_id, provider, style, parent_style);
-          changed |= (computed->values[i] != value->values[i]);
+          values[i] = _gtk_css_value_compute (value->values[i], property_id, provider, style, parent_style);
+          changed |= (values[i] != value->values[i]);
         }
     }
 
   if (!changed)
     {
-      _gtk_css_value_unref (computed);
+      for (i = 0; i < 4; i++)
+        {
+          if (values[i] != NULL)
+            _gtk_css_value_unref (values[i]);
+        }
       return _gtk_css_value_ref (value);
     }
 
+  computed = _gtk_css_border_value_new (values[0], values[1], values[2], values[3]);
+  computed->fill = value->fill;
+
   return computed;
 }